//
// Created by LiuYou on 2021/8/18.
//

#include <cstdlib>
#include <event.h>
#include <event_compat.h>
#include <csignal>

static void signal_cb(int fd, short event, void* argc) {
    event_base* eventBase = (event_base*) argc;
    timeval delay = {2, 0};
    printf( "Caught an interrupt signal; exiting cleanly in two seconds...\n" );
    event_base_loopexit( eventBase, &delay );
}

static void timeout_cb(int fd, short event, void* argc) {
    printf( "timeout\n" );
}

int main(int argc, char** argv) {
    // 调用 event_init()函数创建 event_base对象。一个event_base相当于一个Reactor实例。
    event_base* eventBase = event_init();

    // 创建具体的事件处理器, 并设置它们所从属的Reactor实例。
    event* signalEvent = evsignal_new( eventBase, SIGINT, signal_cb, eventBase );
    // 调用event_add(), 将事件处理器添加到注册事件队列中, 并将该事件处理器对应的事件添加到事件多路分发器中。
    event_add( signalEvent, nullptr );

    timeval timeVal = {1, 0};
    event* timeoutEvent = evtimer_new( eventBase, timeout_cb, nullptr );
    event_add( timeoutEvent, &timeVal );

    // 调用event_base_dispatch()来执行事件循环。
    event_base_dispatch( eventBase );

    // 事件循环结束后, 使用 *_free()系列函数来释放系统资源。
    event_free( timeoutEvent );
    event_free( signalEvent );
    event_base_free( eventBase );


    exit( 0 );
}